    /*
	sha-1算法
	 */
    private static String SHA1(Object str){
        StringBuffer sbf = new StringBuffer();
        try {
            MessageDigest md = MessageDigest.getInstance("SHA-1");
            byte[] digest = md.digest(str.toString().getBytes());
            //字节转为十六进制
            for (int i=0; i<digest.length; i++){
                String shaHex = Integer.toHexString(digest[i]&0xFF);
                if(shaHex.length() < 2){
                    sbf.append(0);
                }
                sbf.append(shaHex);
            }
            logger.info("" + sbf.toString());
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
            return null;
        }
        return sbf.toString();
    }
	
	
	
	class CRC16{
	/*
	 * Java中无论是汉字还是英文字母都是用Unicode编码来表示的，一个Unicode码是16位，每字节是8位，所以一个Unicode码占两字节。
	 * 但是英文字母比较特殊，源自于8位（1字节）的ASCII吗，于是在Unicode码仅使用了低8位（1字节）就可以表示，高8位的话不使用
	 * 也无所谓。所以
	 * char c='a'; 
	 * System.out.println(c.getBytes().lenth()),得到的是1（字节）
	 * 但汉字就完整地使用了16位（2字节）的Unicode，所以
	 * char c='中'; 
	 * System.out.println(c.getBytes().lenth()),得到的是2（字节）
	 * 综上，c='a'在内存中确实只占1字节，但这不意味着String s="abc"在内存中只占3字节。应该这么说，String s="abc"至少在内存
	 * 中占3字节。这是因为char是基本数据类型，而String确是对象类型。对象是一种很复杂的数据类型，你要看一个对象具体占多少字节，
	 * 可以把这个对象序列化后存入一个文本文件来看它具体占用了多少字节，当然这也不是精确的，因为序列化需要写入少量系统信息，但
	 * 大致是对的。*/
 
	public static char[] crc_tb = {
		0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7,
    0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef,
    0x1231, 0x0210, 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,
    0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c, 0xf3ff, 0xe3de,
    0x2462, 0x3443, 0x0420, 0x1401, 0x64e6, 0x74c7, 0x44a4, 0x5485,
    0xa56a, 0xb54b, 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,
    0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6, 0x5695, 0x46b4,
    0xb75b, 0xa77a, 0x9719, 0x8738, 0xf7df, 0xe7fe, 0xd79d, 0xc7bc,
    0x48c4, 0x58e5, 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,
    0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969, 0xa90a, 0xb92b,
    0x5af5, 0x4ad4, 0x7ab7, 0x6a96, 0x1a71, 0x0a50, 0x3a33, 0x2a12,
    0xdbfd, 0xcbdc, 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,
    0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03, 0x0c60, 0x1c41,
    0xedae, 0xfd8f, 0xcdec, 0xddcd, 0xad2a, 0xbd0b, 0x8d68, 0x9d49,
    0x7e97, 0x6eb6, 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,
    0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a, 0x9f59, 0x8f78,
    0x9188, 0x81a9, 0xb1ca, 0xa1eb, 0xd10c, 0xc12d, 0xf14e, 0xe16f,
    0x1080, 0x00a1, 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,
    0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c, 0xe37f, 0xf35e,
    0x02b1, 0x1290, 0x22f3, 0x32d2, 0x4235, 0x5214, 0x6277, 0x7256,
    0xb5ea, 0xa5cb, 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,
    0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405,
    0xa7db, 0xb7fa, 0x8799, 0x97b8, 0xe75f, 0xf77e, 0xc71d, 0xd73c,
    0x26d3, 0x36f2, 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,
    0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9, 0xb98a, 0xa9ab,
    0x5844, 0x4865, 0x7806, 0x6827, 0x18c0, 0x08e1, 0x3882, 0x28a3,
    0xcb7d, 0xdb5c, 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,
    0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0, 0x2ab3, 0x3a92,
    0xfd2e, 0xed0f, 0xdd6c, 0xcd4d, 0xbdaa, 0xad8b, 0x9de8, 0x8dc9,
    0x7c26, 0x6c07, 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,
    0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba, 0x8fd9, 0x9ff8,
    0x6e17, 0x7e36, 0x4e55, 0x5e74, 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0};
 
	public static char caluCRC(char[] pByte) {
		int len = pByte.length;
		char crc = 0;
		int i = 0;
		while (len-- != 0) {
			byte high = (byte) (crc / 256);
			crc <<= 8;
			int num = high ^ pByte[i++];
			if (num < 0)
				num += 256;
			crc ^= crc_tb[num];
		}
		return crc;
	}
 
	public static byte[] charToByte(char c) {
		byte[] b = new byte[2];
		b[0] = (byte) ((c & 0xFF00) >> 8);
		b[1] = (byte) (c & 0xFF);
		return b;
	}
 
	public static byte[] getCRCByteVal(char[] bt) {
		char ch = caluCRC(bt);
		return charToByte(ch);
	}
 
	public static void printHexString(String hint, byte[] b) {
		System.out.print(hint);
		for (int i = 0; i < b.length; i++) {
			String hex = Integer.toHexString(b[i] & 0xFF);
			if (hex.length() == 1)
				hex = '0' + hex;
			System.out.print("0x"+hex.toUpperCase() + " ");
		}
	}
 
	public static void test() {
		// AA AA 0C 01 05 01 AC F0 36 FF FF 00 EE F3
		byte[] crc = getCRCByteVal(new char[] { 0x0c, 0x01, 0x05, 0x01,
				0xAC, 0xF0, 0x36, 0xFF, 0xFF, 0x00 });
		printHexString("crc=", crc);
	}
}


























/**
     * 生成4位图形验证码并保存session
     * @param request
     * @param response
     */
	@RequestMapping("/common/ImageCode.do")
	public void execute(HttpServletRequest request, HttpServletResponse response) {
		try {
			HttpSession session = request.getSession();
			// 语言
			if(null == session.getAttribute(SessConsts.LANGUAGE) || "".equals(session.getAttribute(SessConsts.LANGUAGE))){
				session.setAttribute(SessConsts.LANGUAGE, AppConstants.ZH_CN);
			}
			// 登录成功标记
			String isLogin = session.getAttribute(SessConsts.ISLOGIN)+"";
			session.setAttribute(SessConsts.ISLOGIN, ParamUtil.isEmpty(isLogin) ? "false" : isLogin);
			
			// 创建具有可访问图像数据缓冲区的Image
			BufferedImage buffImg = new BufferedImage(width, height,
					BufferedImage.TYPE_INT_RGB);
			Graphics2D g = buffImg.createGraphics();
			
			// 创建一个随机数生成器
			Random random = new Random();
			Color  color = new Color(245, 245, 245);
			g.setColor(color);
			g.fillRect(0, 0, width, height);
			
			// 创建字体，字体的大小应该根据图片的高度来定
			//Font font = new Font("Fixedsys", Font.ITALIC, 18);
			Font font=null;
			// 画边框
			g.setColor(color);
			// 设置字体
			color = new Color(9, 156, 252);
			g.drawRect(0, 0, width - 1, height - 1);
			int red = 0, green = 0, blue = 0;
			red = random.nextInt(9);
			green = random.nextInt(156);
			blue = random.nextInt(252);
			// 随机产生10条干扰线
			g.setColor(new Color(red, green, blue));
			for (int i = 0; i < 10; i++) {
				int x = random.nextInt(width);
				int y = random.nextInt(height);
				int x1 = random.nextInt(22);
				int y1 = random.nextInt(22);
				g.drawLine(x, y, x + x1, y + y1);
			}
			
			// randomCode 用于保存随机产生的验证码
			StringBuffer randomCode = new StringBuffer();
			
			
			// 随机产生4位数字的验证码
			for (int i = 0; i < 4; i++) {
				// 得到随机产生的验证码数字
				String strRand = String.valueOf(random.nextInt(10));
				font=getFont();
				// 产生随机的颜色分量来构造颜色值
				red = random.nextInt(9);
				green = random.nextInt(156);
				blue = random.nextInt(252);
				// 用随机产生的颜色将验证码绘制到图像中
				g.setFont(font);
				g.setColor(new Color(red, green, blue));
				g.drawString(strRand, 13 * i + 6, 16);
				
				//g.RotateTransform(12);
				
				randomCode.append(strRand);
			}

			
			session.removeAttribute(SessConsts.IMG_CODE);
			session.setAttribute(SessConsts.IMG_CODE, randomCode.toString());
			logger.info("IMG_CODE:"+session.getAttribute(SessConsts.IMG_CODE));
			response.setHeader("Pragma", "no-cache");
			response.setHeader("Cache-Control", "no-cache");
			response.setDateHeader("Expires", 0);

			response.setContentType("image/png");
			ServletOutputStream sos = response.getOutputStream();
			ImageIO.write(buffImg, "png", sos);
			sos.flush();
			sos.close();
		} catch (Exception e) {
			logger.error("client stream close error");
		} 
	}

	/**
	 * 生成4位图形验证码并保存session
	 * @param request
	 * @param response
	 */
	@RequestMapping("/common/ImageCodeBase.do")
	public Map executeBase(HttpServletRequest request, HttpServletResponse response) {
		Map<String, Object> rst = new HashMap<>();
		try {
			HttpSession session = request.getSession();
			// 语言
			if(null == session.getAttribute(SessConsts.LANGUAGE) || "".equals(session.getAttribute(SessConsts.LANGUAGE))){
				session.setAttribute(SessConsts.LANGUAGE, AppConstants.ZH_CN);
			}
			// 登录成功标记
			String isLogin = session.getAttribute(SessConsts.ISLOGIN)+"";
			session.setAttribute(SessConsts.ISLOGIN, ParamUtil.isEmpty(isLogin) ? "false" : isLogin);

			// 创建具有可访问图像数据缓冲区的Image
			BufferedImage buffImg = new BufferedImage(width, height,
					BufferedImage.TYPE_INT_RGB);
			Graphics2D g = buffImg.createGraphics();

			// 创建一个随机数生成器
			Random random = new Random();
			Color  color = new Color(245, 245, 245);
			g.setColor(color);
			g.fillRect(0, 0, width, height);

			// 创建字体，字体的大小应该根据图片的高度来定
			//Font font = new Font("Fixedsys", Font.ITALIC, 18);
			Font font=null;
			// 画边框
			g.setColor(color);
			// 设置字体
			color = new Color(9, 156, 252);
			g.drawRect(0, 0, width - 1, height - 1);
			int red = 0, green = 0, blue = 0;
			red = random.nextInt(9);
			green = random.nextInt(156);
			blue = random.nextInt(252);
			// 随机产生10条干扰线
			g.setColor(new Color(red, green, blue));
			for (int i = 0; i < 10; i++) {
				int x = random.nextInt(width);
				int y = random.nextInt(height);
				int x1 = random.nextInt(22);
				int y1 = random.nextInt(22);
				g.drawLine(x, y, x + x1, y + y1);
			}

			// randomCode 用于保存随机产生的验证码
			StringBuffer randomCode = new StringBuffer();


			// 随机产生4位数字的验证码
			for (int i = 0; i < 4; i++) {
				// 得到随机产生的验证码数字
				String strRand = String.valueOf(random.nextInt(10));
				font=getFont();
				// 产生随机的颜色分量来构造颜色值
				red = random.nextInt(9);
				green = random.nextInt(156);
				blue = random.nextInt(252);
				// 用随机产生的颜色将验证码绘制到图像中
				g.setFont(font);
				g.setColor(new Color(red, green, blue));
				g.drawString(strRand, 13 * i + 6, 16);

				//g.RotateTransform(12);

				randomCode.append(strRand);
			}


			session.removeAttribute(SessConsts.IMG_CODE);
			session.setAttribute(SessConsts.IMG_CODE, randomCode.toString());
			logger.info("IMG_CODE:"+session.getAttribute(SessConsts.IMG_CODE));
//			response.setHeader("Pragma", "no-cache");
//			response.setHeader("Cache-Control", "no-cache");
//			response.setDateHeader("Expires", 0);
//			response.setContentType("image/png");
			//ServletOutputStream sos = response.getOutputStream();
			ByteArrayOutputStream out = new ByteArrayOutputStream();
			ImageIO.write(buffImg, "png", out);
			byte[] bytes = out.toByteArray();
			BASE64Encoder encoder = new BASE64Encoder();
			String encodePic = encoder.encode(bytes);
			rst.put("picture", encodePic);
			rst.put(AppConstants.RET_MESSAGE,"图片生成成功");
			rst.put(AppConstants.RET_CODE,AppConstants.RET_AAAAAA);
			return rst;
		} catch (Exception e) {
			rst.put(AppConstants.RET_MESSAGE,"图片生成失败");
			rst.put(AppConstants.RET_CODE,AppConstants.RET_HS9999);
			logger.error("client stream close error===>",e);
			return rst;
		}
	}

    /**
     * 生成6位图形验证码并保存session
     * @param request
     * @param response
     */
	@RequestMapping("/common/ImageCode6.do")
	public void imageCode6(HttpServletRequest request, HttpServletResponse response) {
		try {
			HttpSession session = request.getSession();
			// 语言
			if(null == session.getAttribute(SessConsts.LANGUAGE) || "".equals(session.getAttribute(SessConsts.LANGUAGE))){
				session.setAttribute(SessConsts.LANGUAGE, AppConstants.ZH_CN);
			}
			// 登录成功标记
			String isLogin = session.getAttribute(SessConsts.ISLOGIN)+"";
			session.setAttribute(SessConsts.ISLOGIN, ParamUtil.isEmpty(isLogin) ? "false" : isLogin);
			
			// 创建具有可访问图像数据缓冲区的Image
			BufferedImage buffImg = new BufferedImage(width, height,
					BufferedImage.TYPE_INT_RGB);
			Graphics2D g = buffImg.createGraphics();
			
			// 创建一个随机数生成器
			Random random = new Random();
			Color  color = new Color(245, 245, 245);
			g.setColor(color);
			g.fillRect(0, 0, width, height);
			
			// 创建字体，字体的大小应该根据图片的高度来定
			//Font font = new Font("Fixedsys", Font.ITALIC, 18);
			Font font=null;
			// 画边框
			g.setColor(color);
			// 设置字体
			color = new Color(9, 156, 252);
			g.drawRect(0, 0, width - 1, height - 1);
			int red = 0, green = 0, blue = 0;
			red = random.nextInt(9);
			green = random.nextInt(156);
			blue = random.nextInt(252);
			// 随机产生10条干扰线
			g.setColor(new Color(red, green, blue));
			for (int i = 0; i < 10; i++) {
				int x = random.nextInt(width);
				int y = random.nextInt(height);
				int x1 = random.nextInt(22);
				int y1 = random.nextInt(22);
				g.drawLine(x, y, x + x1, y + y1);
			}
			
			// randomCode 用于保存随机产生的验证码
			StringBuffer randomCode = new StringBuffer();
			
			
			// 随机产生6位数字的验证码
			for (int i = 0; i < 6; i++) {
				// 得到随机产生的验证码数字
				String strRand = String.valueOf(random.nextInt(10));
				font=getFont();
				// 产生随机的颜色分量来构造颜色值
				red = random.nextInt(9);
				green = random.nextInt(156);
				blue = random.nextInt(252);
				// 用随机产生的颜色将验证码绘制到图像中
				g.setFont(font);
				g.setColor(new Color(red, green, blue));
				g.drawString(strRand, 8 * i + 6, 16);
				
				//g.RotateTransform(12);
				
				randomCode.append(strRand);
			}

			
			session.removeAttribute(SessConsts.IMG_CODE);
			session.setAttribute(SessConsts.IMG_CODE, randomCode.toString());
			logger.info("IMG_CODE:"+session.getAttribute(SessConsts.IMG_CODE));
			response.setHeader("Pragma", "no-cache");
			response.setHeader("Cache-Control", "no-cache");
			response.setDateHeader("Expires", 0);

			response.setContentType("image/png");
			ServletOutputStream sos = response.getOutputStream();
			ImageIO.write(buffImg, "png", sos);
			sos.flush();
			sos.close();
		} catch (Exception e) {
			logger.error("client stream close error");
		} 
	}
	
	private Font getFont()
	 {
	  //获得随机字体;
	//设置font :字体名称:Monotype Corsiva 华文彩云 方正舒体 华文行楷,隶书
	  
	  Random s=new Random();
	  int i=s.nextInt(10);
	  if(i%2==0 && i<6)
	  {
	   return new Font("Times New Roman", Font.PLAIN, 19);
	  }
	  else if(i%3==0)
	  {
	   return new Font("Fixedsys", Font.PLAIN, 18);
	  }
	  else if(i%7==0)
	  {
	   return new Font("Times New Roman", Font.ITALIC, 17);
	  }
	  else
	  {
	   return new Font("Fixedsys", Font.ITALIC, 19);
	  }
	 }
	 
	
	
    /**
     * 生产字母数字随机组合
     */
    private static String doProduce(int maxLength, String source) {
            StringBuffer sb = new StringBuffer(maxLength);
            for (int i = 0; i < maxLength; i++) {
                    final int number =  produceNumber(source.length());
                    sb.append(source.charAt(number));
            }
            return sb.toString();
    }
    /**
     * 随机产生几位数字
     */
    private static final int produceNumber(int maxLength){
            Random random = new Random();
            return random.nextInt(maxLength);
    }

>微信公众号：**[不清不楚的迷茫](#jump_10)**
关注可了解更多的教程及小技巧。问题或建议，请公众号留言;
**[如果你觉得对你有帮助，欢迎赞赏](#jump_20)[^1]**

### JavaScript数据类型总结

[TOC]

###1,为什么要有数据类型？
**答：** 数据类型的出现是为了把数据分成内存大小不同的数据，编程的时候需要用到大数据的时候才需要申请大内存，这样的目的是可以充分利用内存。 **"一键排版"** 、自定义css、80多种代码高亮。
能让Markdown内容，无需作任何调整就能**一键复制**到微信公众号、博客园、掘金、知乎、csdn、51cto、wordpress、hexo。。。等平台。
支持把图片自动上传到云图床;
支持Latex数学公式在公众号等平台完美显示;
支持生成带样式的html文件;
甚至支持直接用原生的html,css排版。

####详细教程
[Md2All详细教程,请参考：https://www.cnblogs.com/garyyan/p/8329343.html](https://www.cnblogs.com/garyyan/p/8329343.html )
####对公众号、博客的优化
支持代码块，并解决常见的代码块换行不正确,特别是iPone、iPad上不能滚动的问题;
解决把内容粘贴到公众号时，图片、或样式丢失的问题;

支持直接把页面"复制"到 "CSDN" 和 "博客园" 中，所有的样式保持一致。
[请参考此博文：http://blog.csdn.net/gary_yan/article/details/78645303](http://blog.csdn.net/gary_yan/article/details/78645303)
支持直接把页面"复制"到 "掘金" 中：
[请参考此博文：https://juejin.im/post/5a1bcc6ef265da431f4acb09](https://juejin.im/post/5a1bcc6ef265da431f4acb09)
支持直接把页面"复制"到 **"知乎"** 、51CTO、worpress ,hex......中。



###代码块显示效果
注：markdown对代码块的语法是开始和结束行都要添加：\`\`\`,其中 \` 为windows键盘左上角那个，如下：

```
public class MyActivity extends AppCompatActivity {
@Override  //override the function
    protected void onCreate(@Nullable Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       try {
            OkhttpManager.getInstance().setTrustrCertificates(getAssets().open("mycer.cer");
            OkHttpClient mOkhttpClient= OkhttpManager.getInstance().build();
        } catch (IOException e) {
            e.printStackTrace();
        }
}
```
要精确指定语言（如：`java,cpp,css,xml,javascript,python,php,go,kotlin,lua,objectivec`等等）时，在头部直接指定，如：\`\`\`javascript，如下：

```javascript
function DisplayWindowSize(){

  var w=window.innerWidth
  || document.documentElement.clientWidth
  || document.body.clientWidth;
}
``` 

如果所有的"代码主题"都不符合你的要求，你可以参考"一键排版"下的"代码块样式"自定义自己喜欢的代码高亮

<a id="jump_10"></a>
###图片显示

下面的是我的公众号二维码图片，欢迎关注。
![图注:大少公众号](http://img.blog.csdn.net/20171012163602706) 
注：markdown对图片链接的语法是:`![]()`,如：`![这里写图片描述](http://img.blog.csdn.net/20171012163602706)`,
可直接把网络图片地址添加到markdown中，
默认为图片居中，如果想居左时，请打开"一键排版"下的css样式中的`img{margin:0 0;}`,
`[这里写图片描述]`中对图片的描述内容会自动生成在图片的底部，对应样式`figcaption{}`
###云图床功能
Md2All支持云图床，设置好云图床后，能把本地图片自动上传到云图床，并自动生成markdown.
[请参考云图床教程:https://www.cnblogs.com/garyyan/p/9181809.html](https://www.cnblogs.com/garyyan/p/9181809.html)

###Latex数学公式(能正确复制到公众号等平台）:
“复制”时会自动把Latex数学公式转换为图片，并自动上传到云图床（如果在“图片”设置了“...,自动上传到云图床”）。
[请参考：Md2All,让公众号完美显示Latex数学公式](https://www.cnblogs.com/garyyan/p/9228994.html)
####行内公式：$...$
是的，我就是行内公式：$e^{x^2}\neq{e^x}^2$，排得OK吗？
####块公式：$$...$$
$$e^{x^2}\neq{e^x}^2$$
来个 *"复杂点"* 的:
$$H(D_2) = -(\frac{2}{4}\ log_2 \frac{2}{4} + \frac{2}{4}\ log_2 \frac{2}{4}) = 1$$
矩阵：
$$
        \begin{pmatrix}
        1 & a_1 & a_1^2 & \cdots & a_1^n \\
        1 & a_2 & a_2^2 & \cdots & a_2^n \\
        \vdots & \vdots & \vdots & \ddots & \vdots \\
        1 & a_m & a_m^2 & \cdots & a_m^n \\
        \end{pmatrix}
$$
对应“一键排版”的css样式关键字为：`.katex`
####Latex复制到公众号等各平台的特别说明
#####复杂的行内公式（顶部和底部突出很多那种），转换后，如果显示不完整，请改为块公式
有些比较复杂的行内公式,转换后，可能会出现顶部和底部很突出的部分看不见的情况，把它改成块公式就OK。
#####公众号报”图片粘贴失败“时，配合云图床完美解决
如果你发现复制到公众号时报**”图片粘贴失败“**，那是因为公众号有个很奇怪的问题：当复制很小很小的本地图片时，就可能会报”图片粘贴失败“，而其它的平台暂时没遇到。
解决的办法是点“图片”图标，设置好图床信息，并选“...,自动上传到云图床”。
[请参考云图床教程:https://www.cnblogs.com/garyyan/p/9181809.html](https://www.cnblogs.com/garyyan/p/9181809.html)
#####针对“知乎”的解决方法
知乎是一个比较神奇的网站，会把你的所有的样式恢复为默认的，并图片一定是居中的，也不能直接复制本地的图片。
所以你如果想要在知乎上正常显示：
1:只用块公式，或你可以接受行内公式在知乎上显示变成了块公式;
2:设置云图床，参考上面公众号那样设置“图片”->“...,自动上传到云图床”。



###Tips
####自动保存
请点击左上角"编辑"图标再开始写作，这样就能自动保存写作内容，目前，所有保存的内容都是储存在本地浏览器缓存中(local storage)，所以,就算重新开机，这些内容都不会丢失的呵，但为了安全起见，在未实现帐号云同步功能前，请自行备份重要内容; 
####一键复制
**一键复制** 请点击工具栏的 **复制**，否则会可能出现奇怪的问题。

####一键排版
**"一键排版"** 支持标准的css,已提供了不少的样式模板，但因为每个人的喜好不一样，所以，如果现有的样式模板不适合你，请尽情地自定义css样式吧。
就算改错了也就"恢复预设值"就OK了，所以不用担心呵。一旦掌握自定义css样式后，你就会知到它到底有多大的威力了 ^_^;

####新版本对某主题样式更新时
当你保存了某排版主题的样式后，Md2All默认会使用你此主题保存的样式，所以，当新版本的Md2All对此主题样式有更新时，你需要“恢复预设值”才能看得到最新的样式。“恢复预设值”前，你可能需要备份一下你之前更改过的样式，否则会被覆盖掉。所以，我建议你把自己的样式保存在“最爱样式”下。

####浏览器兼容性问题，建议用Google chrome
本人用Google Chrome 和Firefox 浏览器做测试时，没发现问题，但用Safari时会存在问题。如果你发现有奇怪的问题，建议用Google chrome。

###Markdown基本语法
####标题
支持6种大小的标题，分别对应`#`,`##`,`###`,`####`,`#####`,`######`，和样式文件中的`h1,...,h6`如：
#####H5
######H6
####行内代码
如：`AppCompatActivity`类,markdown对行内代码的语法是前后用：\`,其中 \` 为windows键盘左上角那个,

####强调
**我是强调**
####斜体
试试*斜体*
####强调的斜体
试试***强调的斜体***
####删除
试试 ~~删除~~
####外链的超链接
试试外链的超链接：[我是外链的超链接](http://blog.csdn.net/gary_yan/article/details/78645303),markdown对链接的语法为：`[]()`,如：`[我是外链的超链接](http://blog.csdn.net/gary_yan/article/details/78645303)`
####页内的超链接
试试页内的超链接：[我是页内的超链接](#jump_1)，注：你先要在要跳转的到地方放置一个类似：`<a id="jump_1">任意内容</a>`的锚点。由`id="jump_1" `来匹配。


####有序列表
1. 有序列表 1
2. 有序列表 2
3. 有序列表 3

####无序列表
- 无序列表 1
- 无序列表 2 
- 无序列表 3

####引用块
只需要在前面加 `>`,如下:
>我是引用块
微信公众号：颜家大少
欢迎关注我，一起学习，一起进步!

####分隔线
***


###Markdown扩展语法

####表格 
| 班级 | 男生 | 女生 |
|-----|-----|------|
| 一(7)班 | 30   | 25 |
| 一(8)班 | 25   | 30 |

注：表格在公众号预览时，可能在PC端显示的不是正确的全屏，但在手机上预览时就会正常显示为全屏的了。

####任务列表
- [x] 任务1，已完成;
- [x] 任务2，已完成;
- [ ] 任务3，未完成; 

####注脚
我是注脚[^10]。点点就能知到我跳到了那儿。
或跳到放置：`<a id="footnote-10">任意内容</a>`的地方,[^10] 对应`id="footnote-10"`


####TOC
看内容目录就是用`[toc]`生成的
注：只要放置:`[TOC]`,就能把其后面的标题如：`#,##,...######`自动生成目录树，注意，`[TOC]`要独立一行，并前面和后面都要空一行


###直接支持html,css
如果你懂html和css，那下面这些效果就不在话下了：

<a href="#jump_1">来个页内跳转</a>，跳转到文未的：`<a id="jump_1">我是页内跳转到的位置</a>` ,对应：`id="jump_1"`
<span  style="color: #5bdaed; ">先给点颜色你看看</span>
<span  style="color: #AE87FA; ">再给点颜色你看看</span> 
<span  style="font-size:1.3em;">试试改变字体大小</span>
<span  style="font-size:1.3em;font-weight: bold;">改变字体大小，再来个粗体又如何？</span>

<p style="text-align:center">
试试内容居中

</p>

<p style="text-align:right">
那内容居右呢？
</p>

<p style="text-align:center;color:#1e819e;font-size:1.3em;font-weight: bold;">
来个综合的试试
<br/>
第二行
</p>

请参考"一键排版"中的"标题首字突出"样式的提示修改,可把此标题首字突出:
###<span class="firstletter">1</span>试试首字突出

注:理论上Md2All是支持所有标准的html和css，但问题是公众号很多都不支持，所以上面只演示了部分支持的。

<a id="footnote-1"></a>
<a id="jump_20"></a>
###赞赏Md2All
如果你觉得到Md2All对你有帮助，欢迎赞赏，有你的支持，Md2All一定会越来越好！
![大少赞赏码](http://img.blog.csdn.net/20171012155402463?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZ2FyeV95YW4=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)

###版本更新记录
***
版本号：V2.8.3
更新日期：2018-07-09
1:增加对以下语言的highlight
dart,r,delphi,vb(vbnet),vbs(vbscript),vbscript-html

版本号：V2.8.2
更新日期：2018-06-28
1:结合云图床，解决了Latex公式复制到公众号时有可能报“图片粘贴失败的问题”;
2:结合云图床，解决了Latex公式复制到知乎的问题;
3:点“图片”图标时，在云图床设置上新增了：“需要转换为图片的内容,会自动上传到云图床”选项
4:在“一键排版”的各样式文件中更新了Latex的样式，主要是显示的大小，你可能需要**“恢复预设值”**才能看到新的样式.

**更多请参考**：
[Md2All版本更新记录](https://www.cnblogs.com/garyyan/p/9238405.html)

***
<a id="jump_1">我是页内跳转到的位置</a>
[^10]: 注脚跳转位置


 


